﻿using System;
using System.Web;
using System.Data;
using HtmlAgilityPack;

namespace WEATHER.Components
{
    public enum DangerousWeatherType
    {
        // Thời tiết nguy hiểm:
        TTNH_BaoVaApThapNhietDoi,       // Bão - Áp thấp nhiệt đới
        TTNH_KhongKhiLanh,              // Không khí lạnh
        TTNH_NangNong,                  // Nắng nóng
        TTNH_KhoHan,                    // Khô hạn
        // Thủy văn đặc biệt:
        TVDB_ThongBaoLu,                // Thông báo lũ
        TVDB_ThongBaoCan,               // Thông báo cạn
        TVDB_ThongBaoXaNuocChongHan     // Thông báo xả nước chống hạn
    }

    public class DangerousWeather
    {
        public static string GetWeatherOffline(Guid moduleID, DangerousWeatherType weatherType, ref DateTime recent)
        {
            string result = "Không lấy được dữ liệu";
            recent = new DateTime(1900, 1, 1);
            //Lấy dữ liệu từ database
            DataSet ds = Item.SelectTopBy_WeatherType(moduleID, weatherType.ToString(), 1);
            if (ds.Tables[0].Rows.Count > 0)
            {
                result = ds.Tables[0].Rows[0]["HtmlContent"].ToString();
                recent = DateTime.Parse(ds.Tables[0].Rows[0]["CreatedDate"].ToString());
            }
            return result;
        }

        public static string GetWeatherOnline(Guid moduleID, DangerousWeatherType weatherType)
        {
            //Lấy dữ liệu từ database
            DateTime recent = new DateTime(1900, 1, 1);

            string htmlContent = GetWeatherOffline(moduleID, weatherType, ref recent);
            DateTime now = DateTime.Now;
            TimeSpan ts = now.Subtract(recent);
            if (ts.TotalMinutes >= 30)
            {
                try
                {
                    // Lấy dữ liệu từ website http://www.nchmf.gov.vn/
                    string url;
                    string weathertitle = "";
                    switch (weatherType)
                    {
                        case DangerousWeatherType.TTNH_BaoVaApThapNhietDoi:
                            url = "http://www.nchmf.gov.vn/website/vi-VN/70/23/Default.aspx";
                            weathertitle = "Thời tiết nguy hiểm - Bão và áp thấp nhiệt đới";
                            break;
                        case DangerousWeatherType.TTNH_KhongKhiLanh:
                            url = "http://www.nchmf.gov.vn/website/vi-VN/70/25/Default.aspx";
                            weathertitle = "Thời tiết nguy hiểm - Không khí lạnh";
                            break;
                        case DangerousWeatherType.TTNH_NangNong:
                            url = "http://www.nchmf.gov.vn/website/vi-VN/70/24/Default.aspx";
                            weathertitle = "Thời tiết nguy hiểm - Nắng nóng";
                            break;
                        case DangerousWeatherType.TTNH_KhoHan:
                            url = "http://www.nchmf.gov.vn/website/vi-VN/70/55/Default.aspx";
                            weathertitle = "Thời tiết nguy hiểm - Khô hạn";
                            break;
                        case DangerousWeatherType.TVDB_ThongBaoLu:
                            url = "http://www.nchmf.gov.vn/website/vi-VN/69/51/Default.aspx";
                            weathertitle = "Thủy văn đặc biệt - Thông báo lũ";
                            break;
                        case DangerousWeatherType.TVDB_ThongBaoCan:
                            url = "http://www.nchmf.gov.vn/website/vi-VN/69/52/Default.aspx";
                            weathertitle = "Thủy văn đặc biệt - Thông báo cạn";
                            break;
                        case DangerousWeatherType.TVDB_ThongBaoXaNuocChongHan:
                            // Co the co nhieu title, chu khong phai 1 title nen co the phat sinh ra loi
                            url = "http://www.nchmf.gov.vn/website/vi-VN/69/53/Default.aspx";
                            weathertitle = "Thủy văn đặc biệt - Thông báo xả nước chống hạn";
                            break;
                        default:
                            url = string.Empty;
                            break;
                    }

                    HtmlWeb web = new HtmlWeb();
                    string result = "";
                    HtmlDocument document = web.Load(url);
                    HtmlNode n = document.DocumentNode.SelectSingleNode("//td[@class='nodata']");
                    if (n != null)
                    {
                        return result;
                    }
                    else
                    {
                        result += document.DocumentNode.SelectSingleNode("//td[@class='TitleNews_Special']").InnerHtml;
                        result += "<br /><br /><br />";
                        result += document.DocumentNode.SelectSingleNode("//td[@class='SummryNews']").InnerHtml;
                        result += "<br /><br />";
                        result += document.DocumentNode.SelectSingleNode("//td[@class='ContentNews']").InnerHtml;
                    }

                    result = HttpUtility.HtmlEncode(result);
                    //Lưu vào database 
                    if (htmlContent != result)
                    {
                        Item item = new Item();
                        item.ModuleID = moduleID;
                        item.Title = weathertitle;
                        item.WeatherType = weatherType.ToString();
                        item.HtmlContent = result;
                        item.CreatedDate = DateTime.Now;
                        item.CreatedBy = "weather@asp.net.vn";
                        item.Insert();
                        htmlContent = result;
                    }
                }
                catch (Exception)
                {
                }
            }
            return htmlContent;
        }
    }
}
